package com.hube.platform.tenant.util;


import com.hube.platform.tenant.exception.ApplicationException;
import com.hube.platform.tenant.exception.DefaultErrorObject;
import com.hube.platform.tenant.exception.IError;

import java.text.MessageFormat;
import java.util.Objects;

/**
 * 断言
 *
 * @author Aaron
 */
public class Assert {
    /**
     * 如果  expression是false 就报异常
     *
     * @param expression      boolean
     * @param message         消息
     * @param errorFormatArgs 消息占位
     */
    public static void isTrue(boolean expression, String message, Object... errorFormatArgs) {
        if (!expression) {
            throw new ApplicationException(DefaultErrorObject.SYSTEM_SERVER_ERROR.code(),
                    MessageFormat.format(message, errorFormatArgs));
        }
    }

    public static void isTrue(boolean expression, IError error, Object... errorFormatArgs) {
        if (!expression) {
            throw new ApplicationException(error, errorFormatArgs);
        }
    }

    /**
     * 如果不是null 就报异常
     *
     * @param object          对象
     * @param message         消息
     * @param errorFormatArgs 消息格式化占位
     */
    public static void isNull(Object object, String message, Object... errorFormatArgs) {
        isTrue(Objects.isNull(object), message, errorFormatArgs);
    }

    public static void isNull(Object object, IError error, Object... errorFormatArgs) {
        isTrue(Objects.isNull(object), error, errorFormatArgs);
    }

    /**
     * 如果是null 就报异常
     *
     * @param object          对象
     * @param message         消息
     * @param errorFormatArgs 消息格式化占位
     */
    public static void notNull(Object object, String message, Object... errorFormatArgs) {
        isTrue(Objects.nonNull(object), message, errorFormatArgs);
    }

    public static void notNull(Object object, IError error, Object... errorFormatArgs) {
        isTrue(Objects.nonNull(object), error, errorFormatArgs);
    }

}
